// 定义
// 后进者先出，先进者后出，简称 后进先出（LIFO），这就是典型的栈结构。
// 新添加的或待删除的元素都保存在栈的末尾，称作栈顶，另一端就叫栈底。
// 在栈里，新元素都靠近栈顶，旧元素都接近栈底。
// 从栈的操作特性来看，是一种 操作受限的线性表，只允许在一端插入和删除数据。
// 不包含任何元素的栈称为空栈。

// 栈也被用在编程语言的编译器和内存中保存变量、方法调用等，比如函数的调用栈。

// 栈的方法：

// push(element)：添加一个（或几个）新元素到栈顶。
// pop()：移除栈顶的元素，同时返回被移除的元素。
// peek()：返回栈顶的元素，不对栈做任何修改。
// isEmpty()：如果栈里没有任何元素就返回 true，否则返回 false。
// clear()：移除栈里的所有元素。
// size()：返回栈里的元素个数。

class Stack {
  constructor() {
    this.items = [];
  }

  push(item) {
    this.items.push(item);
  }

  pop() {
    return this.items.pop();
  }

  peek() {
    return this.items[this.items.length -1];
  }

  isEmpty() {
    return this.items.length === 0;
  }

  clear() {
    this.items = [];
  }

  size() {
    return this.items.length;
  }
}